package au.com.acpfg.misc.jemboss.local; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /** * Represents all emboss programs in a single category eg. UTILS * @author andrew.cassin * */ public class ProgsInCategory implements Iterable<EmbossProgramDescription>,Comparable<ProgsInCategory> { private final Map<String,EmbossProgramDescription> m_progs = new TreeMap<String,EmbossProgramDescription>(); private String m_category_name; public ProgsInCategory(String category_name) { m_category_name = category_name; } /** * Constructor which only puts programs from <code>pic</code> that are acceptable to the specified filter * in the newly constructed instance * @param pic */ public ProgsInCategory(ProgsInCategory pic, MyTreeFilter filter) { m_category_name = pic.m_category_name; for (String name : pic.m_progs.keySet()) { EmbossProgramDescription epd = pic.getProgram(name); assert(epd != null); if (filter.accepts(epd)) { m_progs.put(name, epd); } } } public void add(String emboss_prog_name, String descr) { m_progs.put(emboss_prog_name, new EmbossProgramDescription(emboss_prog_name, descr)); } public Set<String> keys() { return m_progs.keySet(); } public boolean hasName(String cname) { return m_category_name.equals(cname); } public String getCategory() { return m_category_name; } public EmbossProgramDescription getProgram(String k) { return m_progs.get(k); } /** * Returns <code>true</code> if any program in this category passes the * specified filter, <code>false</code> otherwise. * * @param tf * @return */ public boolean hasAcceptablePrograms(MyTreeFilter tf) { for (EmbossProgramDescription epd : m_progs.values()) { if (tf.accepts(epd)) return true; } return false; } public int getIndexOfChild(Object k) { if (k instanceof EmbossProgramDescription) { k = ((EmbossProgramDescription)k).getName(); } if (k instanceof String) { Set<String> keys = m_progs.keySet(); int idx = 0; for (String key : keys) { if (key.equals(k)) { return idx; } idx++; } } return -1; } public Iterator<EmbossProgramDescription> iterator() { return m_progs.values().iterator(); } @Override public int compareTo(ProgsInCategory o) { return m_category_name.compareTo(o.m_category_name); } @Override public String toString() { int cnt = m_progs.size(); if (cnt == 1) { return m_category_name + "[one item]"; } return m_category_name + "["+m_progs.size()+" items]"; } public int getNumPrograms() { return m_progs.size(); } public String getName() { return m_category_name; } }